from py2neo import *
from DataTranser import *
import json
import os

'''
1. 获取每一种类型的节点
2. 对每一种类型的节点列表（list）进行排序
3. 对每一种类型的节点，获取最大的前core_point的点的id_list
4. 按id_list的顺序，查询指向点的下一级的所有节点和关系。
5. 把查询到的所有的节点和关系纳入数据库，注意去重
'''
url = 'http://localhost:7474'  # 本机或者其他地方的数据库地址
user = 'neo4j'  # 数据库用户名
password = '233'  # 数据库密码

graph = Graph(url, username=user, password=password)  # 连接到一个图数据库

deep_length = 1  # 选取的层数

"""
1. port所有的id列表
2. for port_id in port_id_list:
        初始化node_list, links_list
        执行命令:   "match(n:Port)-[r*..deep_length]-(m)
                    where id(n)=port_id
                    return n,r,m"  获取到返回的数据
        transfer data into two lists
        把数据中的点和边写入一个result_list
        把result_list写入文档，命名为port_id
”“”"""

# 获取所有Port的id列表
port_id_list = list(
    graph.run(
        "MATCH (n:Port) RETURN id(n)"))
work_num = len(port_id_list)
i = 0
for port_id in port_id_list:
    # 对于每一个Port id，获取nodes list和links list，生成一个json并保存
    nodes_list = []
    links_list = []
    result_dic = {}
    # 获取与该Port有关的所有的一级跳点
    query_str = "match(n:Port)-[r*.." + str(deep_length) + "]-(m) where id(n)=" + str(port_id[0]) + " return n,m,r"
    records_data = list(
        graph.run(
            query_str))
    # 获取nodes list和links list
    trans_record_data(graph, records_data, nodes_list, links_list)
    # 写入nodes list和links list
    result_dic['nodes_list'] = nodes_list
    result_dic['links_list'] = links_list
    result_json_str = json.dumps(result_dic)
    f = open("/Users/shaozezhi/Downloads/Neo4jData/" + str(port_id[0]) + ".json", "w")
    f.write(result_json_str)
    i = i + 1
    print("已完成" + str(i) + "/" + str(work_num) + "个港口，共计%.2f%%" % (float(i / float(work_num) * 100)))
